package com.shlh.saas.service.twitter;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.shlh.saas.entity.twitter.TwitterUserEs;
import com.shlh.saas.model.dto.TwitterQueryDTO;

import java.util.List;
import java.util.Map;

/**
 * Twitter Elasticsearch服务接口
 * 提供ES查询和两阶段查询功能
 */
public interface TwitterEsService {

    /**
     * 分页查询Twitter用户列表
     * 
     * @param twitterUserEs 查询条件
     * @return 分页结果
     */
    Page<TwitterUserEs> queryTwitterUserList(TwitterUserEs twitterUserEs);
    
    /**
     * 
     * @param name 真实姓名
     * @param screenName 屏幕名称（推特账号）
     * @param limit 最大返回数量，默认50
     * @return 包含sourceTable和sourceId的轻量级结果列表
     */
    List<Map<String, Object>> searchByNameAndScreenName(String name, String screenName, int limit);
    
    /**
     * 两阶段查询第一阶段：ES快速检索
     * 根据姓名和邮箱在ES中查找匹配记录的标识信息
     * 
     * @param name 真实姓名
     * @param email 邮箱
     * @param limit 最大返回数量，默认50
     * @return 包含sourceTable和sourceId的轻量级结果列表
     */
    List<Map<String, String>> searchByNameAndEmail(String name, String email, int limit);
    
    /**
     * 两阶段查询第一阶段：ES快速检索
     * 根据屏幕名称和邮箱在ES中查找匹配记录的标识信息
     * 
     * @param screenName 屏幕名称（推特账号）
     * @param email 邮箱
     * @param limit 最大返回数量，默认50
     * @return 包含sourceTable和sourceId的轻量级结果列表
     */
    List<Map<String, String>> searchByScreenNameAndEmail(String screenName, String email, int limit);
    
    /**
     * 两阶段查询第一阶段：ES快速检索
     * 根据邮箱精确匹配在ES中查找记录标识信息
     * 
     * @param email 邮箱
     * @param size 最大返回数量，默认50
     * @return 包含sourceTable和sourceId的轻量级结果列表
     */
    List<Map<String, String>> searchByEmail(String email, int size, int offset);
    
    /**
     * 两阶段查询第一阶段：ES快速检索
     * 根据屏幕名称精确匹配在ES中查找记录标识信息
     * 
     * @param screenName 屏幕名称（推特账号）
     * @param limit 最大返回数量，默认50
     * @return 包含sourceTable和sourceId的轻量级结果列表
     */
    List<Map<String, String>> searchByScreenName(String screenName, int limit);
    
    /**
     * 两阶段查询第一阶段：ES快速检索
     * 根据粉丝数量范围在ES中查找记录标识信息
     * 
     * @param minFollowers 最小粉丝数
     * @param maxFollowers 最大粉丝数
     * @param limit 最大返回数量，默认50
     * @return 包含sourceTable和sourceId的轻量级结果列表
     */
    List<Map<String, String>> searchByFollowersRange(Integer minFollowers, Integer maxFollowers, int limit);
    
    // ==================== 导出功能两阶段查询方法 ====================
    
    /**
     * 两阶段查询第一阶段：ES快速检索（用于数据导出）
     * 根据复杂筛选条件在ES中查找匹配记录的标识信息
     * 
     * @param queryDTO 查询条件DTO
     * @param limit 最大返回数量
     * @return 包含sourceTable和sourceId的轻量级结果列表
     */
    List<Map<String, String>> searchForExport(TwitterQueryDTO queryDTO, int limit);
    
    /**
     * 两阶段查询第一阶段：ES快速检索（用于数据导出，支持分页）
     * 根据复杂筛选条件在ES中查找匹配记录的标识信息，支持分页查询
     * 
     * @param queryDTO 查询条件DTO
     * @param from 起始位置
     * @param size 查询数量
     * @return 包含sourceTable和sourceId的轻量级结果列表
     */
    List<Map<String, String>> searchForExportWithPagination(TwitterQueryDTO queryDTO, int from, int size);
    
    /**
     * 获取ES查询结果总数（用于导出前的数量预估）
     * 
     * @param queryDTO 查询条件DTO
     * @return 匹配记录总数
     */
    long countForExport(TwitterQueryDTO queryDTO);

    List<TwitterUserEs> searchTwitterUsersWithEmail(String searchKeyword, int offset, int size);

    Long countTwitterUsersWithEmail(String searchKeyword);


    List<Map<String, String>> searchByKeyWord(String keyword, int offset, int limit);

    List<Map<String, Object>> findByKeyWord(String keyword, int offset, int limit);

    long countTwitterUsersWithKeyWord(String keyword);

    List<TwitterUserEs> searchTwitterDataWithEmail(String companyName, String fullName);


}
